从CE入手,研究女神异闻录5皇家版(P5R)的暴击机制 | 您所在的位置:网站首页 › 女神异闻录5r 猎杀者能用即死技能吗 › 从CE入手,研究女神异闻录5皇家版(P5R)的暴击机制 |
前言 最近想要研究下P5R的暴击机制,翻遍全网都没找到统一的说法,可谓是众说纷纭一团乱麻。所以我就想做个研究暴击的专题,但是苦于不会解包。 不过尺有所短寸有所长,最近正好在研究P5R的修改,那干脆用CE,从汇编入手,用笨办法一点点实验出来好了。 本文的主旨意在分享一些寻找切入口的思路,希望能起到抛砖引玉的效果。对汇编不感兴趣的同学可以直接搜索并跳转到“省流”部分,查看结论。 研究问题如下暴击的辅助buff:反叛(Rebellion)、革命(Revolution)、勇气步伐(Brave Step)、斗志营养品(Hustle S),具体暴率为多少,是否可以叠加? 暴击的被动buff:建言(Apt Pupil)、仪式护手-饰品(Gauntlet)、枪弹狂热(Trigger Happy),高压电流(Fortified Moxy),逆境的觉悟(Adverse Resolve),具体暴率为多少,是否可以叠加? 敌我双方运气对暴击率的影响。 通过以上三点的研究,最终推导出整个暴击率的公式是如何计算的。 研究的过程(以下的地址基于steam1.03版本,所有测试基于Challenge模式)1.显示暴击率的切入口 首先我们需要梳理代码逻辑,找到显示暴击率的切入口。 从常理上说,每当使用可以触发暴击的技能时,程序应该会读取储存是否存在暴击buff的地址数值,如果存在暴击buff,不管是加法还是乘法,总之会使得暴击率上升。 所以储存暴击buff的地址就是一个很好的切入点。 在这里感谢下那位写CT表的外国大佬,节省了我很多时间。 以Mona为测试对象,已知Mona的暴击率buff地址是[P5R.exe+29E940E]。 对该地址下断,查找什么访问了该地址,然后使用一次奇迹拳,发现只有一个地方读取了该地址的值: 跟过去,发现这里代码是读取了地址,然后进行一些计算和判断(我没仔细看,但用脚趾头想都知道一定是读取暴击buff数据啊,暴击buff是否存在等操作),直到: 这里是一个非常重要的关键点(简称关键点1),因为它基本上确定了,暴击的辅助buff是加法。 接着往下走,直到: 这里同样是个很重要的关键点,具体的汇编逻辑就是,计算后的暴击率如果大于60那么取60,如果小于60那么不变。说明暴击率的上限不是网传的70或者67,而是60。 继续往下走,直到: 中间一群shr mul的运算看的我脑仁疼,我也没有认真去追。 但是我猜啊,如果我是程序员,肯定Random一个100以内的随机数,用该随机数和暴击率比大小,最终决定是否暴击。 所以如果想要写百分百暴击的脚本,直接把jnl nop掉即可成功,即: 至此,先总结下代码逻辑: 那么关键点1(P5R.exe+E14BFE) 则是一个很好的切入口,因为可以通过它得知暴击基础几率和buff附带的暴击几率分别为多少。 2.记录数据 找到了显示几率的切入口,那么接下来就是实验记录数据了 先以Mona奇迹拳为例子,反复攻击同一小怪。得出如下数据(0x表示16进制,即0xA=10): 从上述数据可以得出结论1: 反叛(Rebellion)、勇气步伐(Brave Step)、斗志营养品(Hustle S)不可叠加,且暴击率+=7 革命(Revolution)可与上述buff叠加,且暴击率+=15 接下来以Mona至高魔弹为例子,反复攻击同一小怪。得出如下数据: 从上述数据可以得出结论2: 仪式护手-饰品(Gauntlet)、建言(Apt Pupil)不可叠加,且暴击率=基础暴击率x2 继续: 从上述数据可以得出结论3: 枪弹狂热(Trigger Happy)与其余所有buff都可叠加,且暴击率+=25 逆境觉悟和高压电流我就偷懒直接上结论了 至此,我们就可以总结出目前得到的结论了: 暴击率=基础暴击率+buff附带的暴击率,且上限为60。 基础暴击率指的是技能自带的暴击率,外加双方运差的计算,最终得出的几率。 如果带有建言(Apt Pupil)或者仪式护手-饰品(Gauntlet),那么基础暴击率会翻倍。两者择其一即可,不可叠加。 其余所有的暴击算法都是在建言计算后,进行加法,具体为: 枪弹狂热(Trigger Happy):+25 反叛(Rebellion)、勇气步伐(Brave Step)、斗志营养品(Hustle S):+7,且三者互相不可叠加 革命(Revolution):+15 高压电流(Fortified Moxy):+15 逆境的觉悟(Adverse Resolve):+20 3.运差对基础暴击率的影响 当下我们已经得到了buff附带的暴击几率,以及它们之间是否叠加的结论,只剩下研究敌我双方的运气对于暴击率的影响了。 先准备一只Mona,属性如下: 力=20 魔=40 耐=60 速=80 运=50 然后对同一小怪使用奇迹拳,已知该技能命中=75,暴击率=45。 已知Mona敏的地址是[P5R.exe+29E9444],对该地址查找访问,获取读取地址 及其Return Address 分别对返回地址进行追踪,发现 返回rax=0x32=50=己方运 返回rax=0x32=50=己方运 返回xmm0=(float)50.00=己方运,储存在xmm7 不必跳出函数,继续跟踪此段代码 返回xmm0=(float)36.00=猜测为敌方运,储存在xmm6 返回xmm0=(float)45.00=猜测为技能暴击率,储存在xmm0 然后往下走 这段代码已经是明示了 向下取整得基础暴击率=52 研究的结论(省流)最终暴击率=基础暴击率(小数点向下取整)+buff附带的暴击率,且上限为60。 如果带有建言(Apt Pupil)或者仪式护手-饰品(Gauntlet),那么基础暴击率会翻倍。两者择其一即可,不可叠加。 其余所有的暴击算法都是在建言计算完成后,进行加法,具体为: 枪弹狂热(Trigger Happy):+25 反叛(Rebellion)、勇气步伐(Brave Step)、斗志营养品(Hustle S):+7,且三者互相不可叠加 革命(Revolution):+15 高压电流(Fortified Moxy):+15 逆境的觉悟(Adverse Resolve):+20 举例1: 义经:运=80 拉雯妲:运=75 用义经使用八艘跳,那么最大化暴击率的方式是: 带建言+逆境的觉悟(配合松的生命力)+反叛+革命 基础暴击率=(80+50)/(75+50)*5=5 最终暴击率=5*2+20+7+15=52 举例2: Mona:运=99 拉雯妲:运=75 那么Mona对拉雯妲用奇迹拳, 基础暴击率=(99+50)/(75+50)*45=53 也就是说99运的Mona只需要一个反叛暴击buff(+7)即可拉满暴击率,前提是得命中 |
CopyRight 2018-2019 实验室设备网 版权所有 |